↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PrologToPiTRSProof
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
ACKERMANN_IN_GAG(s(M), 0, Val) → U1_GAG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GAG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), 0, Val) → U1_GGG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → U1_GGA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGA(M, N, Val, ackermann_in_gga(M, Val1, Val))
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGG(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAG(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
ACKERMANN_IN_GAA(s(M), 0, Val) → U1_GAA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GAA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAA(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAG(M, N, Val, ackermann_in_gag(M, Val1, Val))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
ACKERMANN_IN_GAG(s(M), 0, Val) → U1_GAG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GAG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), 0, Val) → U1_GGG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → U1_GGA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGA(M, N, Val, ackermann_in_gga(M, Val1, Val))
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGG(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAG(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
ACKERMANN_IN_GAA(s(M), 0, Val) → U1_GAA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GAA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAA(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAG(M, N, Val, ackermann_in_gag(M, Val1, Val))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GGA(s(M), s(N)) → U2_GGA(M, ackermann_in_gga(s(M), N))
U2_GGA(M, ackermann_out_gga(Val1)) → ACKERMANN_IN_GGA(M, Val1)
ACKERMANN_IN_GGA(s(M), 0) → ACKERMANN_IN_GGA(M, s(0))
ACKERMANN_IN_GGA(s(M), s(N)) → ACKERMANN_IN_GGA(s(M), N)
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gga(x0, x1)
U1_gga(x0)
U2_gga(x0, x1)
U3_gga(x0)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
U2_GAA(M, ackermann_out_gaa) → ACKERMANN_IN_GAA(M)
ackermann_in_gaa(s(M)) → U1_gaa(ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(ackermann_out_gga(Val)) → ackermann_out_gaa
U2_gaa(M, ackermann_out_gaa) → U3_gaa(ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U3_gaa(ackermann_out_gaa) → ackermann_out_gaa
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
U2_GAA(M, ackermann_out_gaa) → ACKERMANN_IN_GAA(M)
Used ordering: Polynomial interpretation [25]:
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
POL(0) = 0
POL(ACKERMANN_IN_GAA(x1)) = x1
POL(U1_gaa(x1)) = 1 + x1
POL(U1_gga(x1)) = 0
POL(U2_GAA(x1, x2)) = 1 + x1
POL(U2_gaa(x1, x2)) = 1
POL(U2_gga(x1, x2)) = 0
POL(U3_gaa(x1)) = 1
POL(U3_gga(x1)) = 0
POL(ackermann_in_gaa(x1)) = 1
POL(ackermann_in_gga(x1, x2)) = 0
POL(ackermann_out_gaa) = 1
POL(ackermann_out_gga(x1)) = 1
POL(s(x1)) = 1 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(s(M)) → U1_gaa(ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(ackermann_out_gga(Val)) → ackermann_out_gaa
U2_gaa(M, ackermann_out_gaa) → U3_gaa(ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U3_gaa(ackermann_out_gaa) → ackermann_out_gaa
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(s(M)) → U1_gaa(ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(ackermann_out_gga(Val)) → ackermann_out_gaa
U2_gaa(M, ackermann_out_gaa) → U3_gaa(ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U3_gaa(ackermann_out_gaa) → ackermann_out_gaa
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PrologToPiTRSProof
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PrologToPiTRSProof
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PrologToPiTRSProof
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, Val, ackermann_in_gga(s(M), N))
U2_GGG(M, Val, ackermann_out_gga(Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gga(x0, x1)
U1_gga(x0)
U2_gga(x0, x1)
U3_gga(x0)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PrologToPiTRSProof
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PrologToPiTRSProof
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PrologToPiTRSProof
U2_GAG(M, Val, ackermann_out_gaa) → ACKERMANN_IN_GAG(M, Val)
ACKERMANN_IN_GAG(s(M), Val) → U2_GAG(M, Val, ackermann_in_gaa(s(M)))
ackermann_in_gaa(s(M)) → U1_gaa(ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(ackermann_out_gga(Val)) → ackermann_out_gaa
U2_gaa(M, ackermann_out_gaa) → U3_gaa(ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, ackermann_in_gga(s(M), N))
U3_gaa(ackermann_out_gaa) → ackermann_out_gaa
U2_gga(M, ackermann_out_gga(Val1)) → U3_gga(ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa
ackermann_in_gga(s(M), 0) → U1_gga(ackermann_in_gga(M, s(0)))
U3_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
U1_gga(ackermann_out_gga(Val)) → ackermann_out_gga(Val)
ackermann_in_gaa(x0)
U1_gaa(x0)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0)
U2_gga(x0, x1)
U3_gga(x0)
U1_gga(x0)
From the DPs we obtained the following set of size-change graphs:
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
ACKERMANN_IN_GAG(s(M), 0, Val) → U1_GAG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GAG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), 0, Val) → U1_GGG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → U1_GGA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGA(M, N, Val, ackermann_in_gga(M, Val1, Val))
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGG(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAG(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
ACKERMANN_IN_GAA(s(M), 0, Val) → U1_GAA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GAA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAA(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAG(M, N, Val, ackermann_in_gag(M, Val1, Val))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
ACKERMANN_IN_GAG(s(M), 0, Val) → U1_GAG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GAG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), 0, Val) → U1_GGG(M, Val, ackermann_in_ggg(M, s(0), Val))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → U1_GGA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGA(M, N, Val, ackermann_in_gga(M, Val1, Val))
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_GGG(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAG(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
ACKERMANN_IN_GAA(s(M), 0, Val) → U1_GAA(M, Val, ackermann_in_gga(M, s(0), Val))
ACKERMANN_IN_GAA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAA(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_GAG(M, N, Val, ackermann_in_gag(M, Val1, Val))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
↳ PiDP
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
↳ PiDP
U2_GGA(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1, Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → ACKERMANN_IN_GGA(s(M), N, Val1)
ACKERMANN_IN_GGA(s(M), 0, Val) → ACKERMANN_IN_GGA(M, s(0), Val)
ACKERMANN_IN_GGA(s(M), s(N), Val) → U2_GGA(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
↳ PiDP
ACKERMANN_IN_GGA(s(M), s(N)) → U2_GGA(M, N, ackermann_in_gga(s(M), N))
U2_GGA(M, N, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGA(M, Val1)
ACKERMANN_IN_GGA(s(M), 0) → ACKERMANN_IN_GGA(M, s(0))
ACKERMANN_IN_GGA(s(M), s(N)) → ACKERMANN_IN_GGA(s(M), N)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
ackermann_in_gga(x0, x1)
U1_gga(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M), s(N), Val) → ACKERMANN_IN_GAA(s(M), N, Val1)
U2_GAA(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAA(M, Val1, Val)
ACKERMANN_IN_GAA(s(M), s(N), Val) → U2_GAA(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
U2_GAA(M, ackermann_out_gaa(s(M))) → ACKERMANN_IN_GAA(M)
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(s(M)) → U1_gaa(M, ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M))
U2_gaa(M, ackermann_out_gaa(s(M))) → U3_gaa(M, ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U3_gaa(M, ackermann_out_gaa(M)) → ackermann_out_gaa(s(M))
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa(0)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
U2_GAA(M, ackermann_out_gaa(s(M))) → ACKERMANN_IN_GAA(M)
Used ordering: Polynomial interpretation [25]:
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
POL(0) = 0
POL(ACKERMANN_IN_GAA(x1)) = x1
POL(U1_gaa(x1, x2)) = 0
POL(U1_gga(x1, x2)) = 0
POL(U2_GAA(x1, x2)) = 1 + x1
POL(U2_gaa(x1, x2)) = 0
POL(U2_gga(x1, x2, x3)) = 0
POL(U3_gaa(x1, x2)) = 0
POL(U3_gga(x1, x2, x3)) = 0
POL(ackermann_in_gaa(x1)) = 1
POL(ackermann_in_gga(x1, x2)) = 0
POL(ackermann_out_gaa(x1)) = 0
POL(ackermann_out_gga(x1, x2, x3)) = 0
POL(s(x1)) = 1 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M)) → U2_GAA(M, ackermann_in_gaa(s(M)))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(s(M)) → U1_gaa(M, ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M))
U2_gaa(M, ackermann_out_gaa(s(M))) → U3_gaa(M, ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U3_gaa(M, ackermann_out_gaa(M)) → ackermann_out_gaa(s(M))
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa(0)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(s(M)) → U1_gaa(M, ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M))
U2_gaa(M, ackermann_out_gaa(s(M))) → U3_gaa(M, ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U3_gaa(M, ackermann_out_gaa(M)) → ackermann_out_gaa(s(M))
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa(0)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ NonTerminationProof
↳ PiDP
↳ PiDP
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
ACKERMANN_IN_GAA(s(M)) → ACKERMANN_IN_GAA(s(M))
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
U2_GGG(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → ACKERMANN_IN_GGG(M, Val1, Val)
ACKERMANN_IN_GGG(s(M), s(N), Val) → U2_GGG(M, N, Val, ackermann_in_gga(s(M), N))
ACKERMANN_IN_GGG(s(M), 0, Val) → ACKERMANN_IN_GGG(M, s(0), Val)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
ackermann_in_gga(x0, x1)
U1_gga(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gag(0, N, s(N)) → ackermann_out_gag(0, N, s(N))
ackermann_in_gag(s(M), 0, Val) → U1_gag(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(0, N, s(N)) → ackermann_out_ggg(0, N, s(N))
ackermann_in_ggg(s(M), 0, Val) → U1_ggg(M, Val, ackermann_in_ggg(M, s(0), Val))
ackermann_in_ggg(s(M), s(N), Val) → U2_ggg(M, N, Val, ackermann_in_gga(s(M), N, Val1))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
U2_ggg(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_ggg(M, N, Val, ackermann_in_ggg(M, Val1, Val))
U3_ggg(M, N, Val, ackermann_out_ggg(M, Val1, Val)) → ackermann_out_ggg(s(M), s(N), Val)
U1_ggg(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_ggg(s(M), 0, Val)
U1_gag(M, Val, ackermann_out_ggg(M, s(0), Val)) → ackermann_out_gag(s(M), 0, Val)
ackermann_in_gag(s(M), s(N), Val) → U2_gag(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gag(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gag(M, N, Val, ackermann_in_gag(M, Val1, Val))
U3_gag(M, N, Val, ackermann_out_gag(M, Val1, Val)) → ackermann_out_gag(s(M), s(N), Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
ACKERMANN_IN_GAG(s(M), s(N), Val) → U2_GAG(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U2_GAG(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → ACKERMANN_IN_GAG(M, Val1, Val)
ackermann_in_gaa(s(M), 0, Val) → U1_gaa(M, Val, ackermann_in_gga(M, s(0), Val))
ackermann_in_gaa(s(M), s(N), Val) → U2_gaa(M, N, Val, ackermann_in_gaa(s(M), N, Val1))
U1_gaa(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M), 0, Val)
U2_gaa(M, N, Val, ackermann_out_gaa(s(M), N, Val1)) → U3_gaa(M, N, Val, ackermann_in_gaa(M, Val1, Val))
ackermann_in_gga(0, N, s(N)) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N), Val) → U2_gga(M, N, Val, ackermann_in_gga(s(M), N, Val1))
U3_gaa(M, N, Val, ackermann_out_gaa(M, Val1, Val)) → ackermann_out_gaa(s(M), s(N), Val)
U2_gga(M, N, Val, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, Val, ackermann_in_gga(M, Val1, Val))
ackermann_in_gaa(0, N, s(N)) → ackermann_out_gaa(0, N, s(N))
ackermann_in_gga(s(M), 0, Val) → U1_gga(M, Val, ackermann_in_gga(M, s(0), Val))
U3_gga(M, N, Val, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, Val, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
ACKERMANN_IN_GAG(s(M), Val) → U2_GAG(M, Val, ackermann_in_gaa(s(M)))
U2_GAG(M, Val, ackermann_out_gaa(s(M))) → ACKERMANN_IN_GAG(M, Val)
ackermann_in_gaa(s(M)) → U1_gaa(M, ackermann_in_gga(M, s(0)))
ackermann_in_gaa(s(M)) → U2_gaa(M, ackermann_in_gaa(s(M)))
U1_gaa(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gaa(s(M))
U2_gaa(M, ackermann_out_gaa(s(M))) → U3_gaa(M, ackermann_in_gaa(M))
ackermann_in_gga(0, N) → ackermann_out_gga(0, N, s(N))
ackermann_in_gga(s(M), s(N)) → U2_gga(M, N, ackermann_in_gga(s(M), N))
U3_gaa(M, ackermann_out_gaa(M)) → ackermann_out_gaa(s(M))
U2_gga(M, N, ackermann_out_gga(s(M), N, Val1)) → U3_gga(M, N, ackermann_in_gga(M, Val1))
ackermann_in_gaa(0) → ackermann_out_gaa(0)
ackermann_in_gga(s(M), 0) → U1_gga(M, ackermann_in_gga(M, s(0)))
U3_gga(M, N, ackermann_out_gga(M, Val1, Val)) → ackermann_out_gga(s(M), s(N), Val)
U1_gga(M, ackermann_out_gga(M, s(0), Val)) → ackermann_out_gga(s(M), 0, Val)
ackermann_in_gaa(x0)
U1_gaa(x0, x1)
U2_gaa(x0, x1)
ackermann_in_gga(x0, x1)
U3_gaa(x0, x1)
U2_gga(x0, x1, x2)
U3_gga(x0, x1, x2)
U1_gga(x0, x1)
From the DPs we obtained the following set of size-change graphs: